package com.hsnn.medstgmini.sys.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.dict.model.DicCompType;
import com.hsnn.medstgmini.base.dict.service.DicCompTypeManager;
import com.hsnn.medstgmini.base.std.model.HospClassify;
import com.hsnn.medstgmini.base.std.model.HospInfo;
import com.hsnn.medstgmini.base.std.model.HospLevel;
import com.hsnn.medstgmini.base.std.model.StdCompinfo;
import com.hsnn.medstgmini.base.std.service.StdCompinfoManager;
import com.hsnn.medstgmini.base.std.service.StdHospInfoManager;
import com.hsnn.medstgmini.model.Whether;
import com.hsnn.medstgmini.sys.model.RegCompInfo;
import com.hsnn.medstgmini.sys.model.RegHealthbureau;
import com.hsnn.medstgmini.sys.model.RegHospInfo;
import com.hsnn.medstgmini.sys.model.SysRole;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.sys.model.UserType;
import com.hsnn.medstgmini.sys.service.RegHealthbureauManager;
import com.hsnn.medstgmini.sys.service.SysRoleManager;
import com.hsnn.medstgmini.sys.service.SysUserAuditManager;
import com.hsnn.medstgmini.sys.service.SysUserManager;
import com.hsnn.medstgmini.util.AccountUtil;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 注册用户审核
 * @author 蔡春龙
 * @date 2015年6月25日
 */
@Controller
@RequestMapping("/auditUser")
public class SysUserAuditController {

	private static final Logger log = Logger
			.getLogger(SysUserAuditController.class);

	@Autowired
	private RegHealthbureauManager regHealthbureauManager;
	
	@Autowired
	private SysUserAuditManager userAuditManager;

	@Autowired
	private StdHospInfoManager hospInfoManager;

	@Autowired
	private SysUserManager userManager;

	@Autowired
	private SysRoleManager roleManager;

	@Autowired
	private StdCompinfoManager compinfoManager;

	@Autowired
	private DicCompTypeManager compTypeManager;

	@Autowired
	private HttpSession session;
	@Autowired
	private HttpServletRequest request;

	/**
	 * @category 获取当前登陆人信息
	 * @date 2015年6月14日
	 * @return
	 */
	private SysUser getUser() {
		return (SysUser) session.getAttribute(Constants.USERINFO);
	}

	/**
	 * @category 跳转卫生局注册信息审核列表页面
	 * @author 韩守松
	 * @date   2015年11月3日
	 * @param  @return
	 */
	@RequestMapping("/toAuditHeaBurList")
	public String toAuditHeaBurList() {
		return "/sys/auditHeaBurList";
	}

	/**
	 * @category 分页查询卫生局注册信息审核列表
	 * @author 韩守松
	 * @date   2015年11月3日
	 * @param  @param regHealthbureau
	 * @param  @return
	 */
	@RequestMapping("/getAuditHeaBurList")
	@ResponseBody
	public Pagination getAuditHeaBurList(RegHealthbureau regHealthbureau) {
		Pagination page = new Pagination();
		try {
			if (regHealthbureau != null) {
				regHealthbureauManager.getAuditUserList(page, regHealthbureau);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}
	
	/**
	 * @category 跳转医疗机构注册信息审核列表页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditHospList")
	public String toAuditHospList() {
		return "/sys/auditHospList";
	}

	/**
	 * @category 分页查询医疗机构注册信息审核列表
	 * @date 2015年6月24日
	 * @param hospInfo
	 * @return
	 */
	@RequestMapping("/getAuditHospList")
	@ResponseBody
	public Pagination getAuditHospList(RegHospInfo hospInfo) {
		Pagination page = new Pagination();
		try {
			if (hospInfo != null) {
				userAuditManager.getAuditUserList(page, hospInfo);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}
	
	/**
	 * @category 跳转卫生局注册信息审核审核页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditHeaBurEdit")
	public String toAuditHeaBurEdit(Model model, String heaBurId) {
		RegHealthbureau regHealthbureau = new RegHealthbureau();
		if (StringUtils.isNotBlank(heaBurId)) {
			regHealthbureau = regHealthbureauManager.getAuditHeaBurById(heaBurId);
		}
		model.addAttribute("regHealthbureau", regHealthbureau);
		return "/sys/auditHeaBurEdit";
	}

	/**
	 * @category 保存卫生局注册信息审核
	 * @author 韩守松
	 * @date   2015年11月3日
	 * @param  @param hospInfo
	 * @param  @return
	 */
	@RequestMapping("/saveAuditHeaBur")
	@ResponseBody
	public Pagination saveAuditHeaBur(RegHealthbureau  regHealthbureau) {
		Pagination page = new Pagination();
		try {
			if (regHealthbureau != null) {
				regHealthbureau.setAuditor(getUser().getId());
				regHealthbureauManager.saveAuditHeaBur(regHealthbureau);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	/**
	 * @category 验证卫生局名称是否存在
	 * @author 韩守松
	 * @date   2015年11月4日
	 * @param  @param regHealthbureau
	 * @param  @return
	 */
	@RequestMapping("/checkHeaBurExist")
	@ResponseBody
	public Pagination checkHeaBurExist(RegHealthbureau regHealthbureau) {
		Pagination page = new Pagination();
		try {
			if (regHealthbureau != null) {
				page.setRows(regHealthbureauManager.checkHeaBurExist(regHealthbureau));
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}
	
	/**
	 * @category 跳转卫生局注册信息审核日志列表页面
	 * @author 韩守松
	 * @date   2015年11月4日
	 * @param  @return
	 */
	@RequestMapping("/toAuditHeaBurLogList")
	public String toAuditHeaBurLogList() {
		return "/sys/auditHeaBurLogList";
	}

	/**
	 * @category 查询卫生局注册信息审核日志列表
	 * @author 韩守松
	 * @date   2015年11月4日
	 * @param  @param regHealthbureau
	 * @param  @return
	 */
	@RequestMapping("/getAuditHeaBurLogList")
	@ResponseBody
	public Pagination toAuditHeaBurLogList(RegHealthbureau regHealthbureau) {
		Pagination page = new Pagination(request);
		try {
			if (regHealthbureau != null) {
				regHealthbureauManager.getAuditUserLogList(page, regHealthbureau);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}
	
	/**
	 * @category 跳转医疗机构注册信息审核日志详情页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditHenBurLogDetail")
	public String toAuditHenBurLogDetail(Model model, String heaBurId) {
		RegHealthbureau regHealthbureau = new RegHealthbureau();
		if (StringUtils.isNotBlank(heaBurId)) {
			regHealthbureau = regHealthbureauManager.getAuditHeaBurById(heaBurId);
		}
		model.addAttribute("regHealthbureau", regHealthbureau);
		return "/sys/auditHeaBurLogDetail";
	}
	/**
	 * @category 跳转医疗机构注册信息审核审核页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditHospEdit")
	public String toAuditHospEdit(Model model, String hospId) {
		RegHospInfo hospInfo = new RegHospInfo();
		if (StringUtils.isNotBlank(hospId)) {
			hospInfo = userAuditManager.getAuditHospById(hospId);
			if(null != hospInfo.getHospClassify() ){
				hospInfo.setHospClassifyName(userAuditManager.getClassifyName(hospInfo.getHospClassify().toString()));
			}
			if(StringUtils.isNotBlank(hospInfo.getHospLevelId())){
				hospInfo.setHospLevelName(userAuditManager.getLevelName(hospInfo.getHospLevelId()));
			}
			
		}
		model.addAttribute("hospInfo", hospInfo);
		model.addAttribute("classifyList", HospClassify.values());
		model.addAttribute("levelList", HospLevel.values());
		return "/sys/auditHospEdit";
	}

	/**
	 * @category 保存医疗机构注册信息审核
	 * @param hospInfo
	 * @param opType
	 * @return
	 */
	@RequestMapping("/saveAuditHosp")
	@ResponseBody
	public Pagination saveAuditHosp(RegHospInfo hospInfo) {
		Pagination page = new Pagination();
		try {
			if (hospInfo != null) {
				hospInfo.setAuditor(getUser().getId());
				userAuditManager.saveAuditHosp(hospInfo);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	/**
	 * @category 保存医疗机构注册信息审核
	 * @param hospInfo
	 * @param opType
	 * @return
	 */
	@RequestMapping("/checkHospExist")
	@ResponseBody
	public Pagination checkHospExist(RegHospInfo hospInfo) {
		Pagination page = new Pagination();
		try {
			if (hospInfo != null) {
				page.setRows(hospInfoManager.checkHospExist(hospInfo));
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	@RequestMapping("/toAuditCreateUser")
	public String toAuditCreateUser(Model model, int userType, String id,
			String backUrl) {
		log.info("enter toAuditCreateUser method");
		SysUser user = new SysUser();
		if (UserType.yy.getKey() == userType) { // 新增医疗机构帐户
			HospInfo hospInfo = hospInfoManager.getHospInfoById(id);
			if (hospInfo != null) {
				user.setId(hospInfo.getHospId());
				user.setName(hospInfo.getHospName());
				user.setEmail(hospInfo.getHospInfoDetail().getContactEmail());
				user.setType(userType);
				user.setMain(Whether.yes.getKey());
				user.setPhone(hospInfo.getHospInfoDetail()
						.getContactHandphone());
				user.setStatus(hospInfo.getStatus());
				user.setLocked(Whether.no.getKey());
			}
		} else if (UserType.sc.getKey() == userType
				|| UserType.ps.getKey() == userType) { // 新增企业帐户
			List<StdCompinfo> list = compinfoManager.queryStdCompinfoById(id);
			if (list != null && !list.isEmpty()) {
				StdCompinfo compInfo = list.get(0);
				if (compInfo != null) {
					user.setId(compInfo.getCompId());
					user.setName(compInfo.getCompName());
					user.setEmail(compInfo.getStdCompinfoDetail()
							.getContactEmail());
					user.setType(userType);
					user.setMain(Whether.yes.getKey());
					user.setPhone(compInfo.getCompPhone());
					user.setStatus((int) compInfo.getStatus());
					user.setLocked(Whether.no.getKey());
				}
			}
		}
		// 生成主帐号
		Long number = userManager.getSequence();
		String sequence = AccountUtil.generate(UserType.getUserType(userType),
				number);
		user.setUsername(sequence);
		// 生成6位密码
		String password = AccountUtil.getPassword(6);
		user.setPassword(password);
		session.setAttribute("password", password);
		List<SysRole> roleList = roleManager.getZxRoleList();
		model.addAttribute("roleList", roleList);
		model.addAttribute("user", user);
		model.addAttribute("backUrl", backUrl);
		return "/sys/auditCreateUser";
	}

	/**
	 * @category 跳转企业注册信息审核列表页面
	 * @date 2015年6月25日
	 * @param compType1生产企业2配送企业
	 * @return
	 */
	@RequestMapping("/toAuditCompList")
	public String toAuditCompList(Model model, int compType) {
		model.addAttribute("compType", compType);
		return "/sys/auditCompList";
	}

	/**
	 * @category 分页查询企业注册信息审核列表
	 * @date 2015年6月24日
	 * @param compInfo
	 * @return
	 */
	@RequestMapping("/getAuditCompList")
	@ResponseBody
	public Pagination getAuditCompList(RegCompInfo compInfo, int compType) {
		Pagination page = new Pagination(request);
		try {
			if (compInfo != null) {
				userAuditManager.getAuditUserList(page, compInfo);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	/**
	 * @category 跳转企业注册信息审核审核页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditCompEdit")
	public String toAuditCompEdit(Model model, int compType, String compId) {
		RegCompInfo compInfo = new RegCompInfo();
		DicCompType fatherCompRegType = new DicCompType();
		if (StringUtils.isNotBlank(compId)) {
			compInfo = userAuditManager.getAuditCompById(compId);
			if (compInfo != null) {
				DicCompType compRegType = compInfo.getCompReg();
				if (compRegType != null) {
					fatherCompRegType = compTypeManager
							.getDicCompTypeById(compRegType.getFatherId());
				}
			}
		}
		model.addAttribute("compType", compType);
		model.addAttribute("compInfo", compInfo);
		model.addAttribute("fatherCompRegType", fatherCompRegType);
		return "/sys/auditCompEdit";
	}

	/**
	 * @category 检验企业注册信息是否存在
	 * @param compInfo
	 * @return
	 */
	@RequestMapping("/checkCompExist")
	@ResponseBody
	public Pagination checkCompExist(RegCompInfo compInfo) {
		Pagination page = new Pagination(request);
		try {
			if (compInfo != null) {
				page.setRows(userAuditManager.checkCompExist(compInfo));
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	/**
	 * @category 保存企业注册信息审核
	 * @param compInfo
	 * @param opType
	 * @return
	 */
	@RequestMapping("/saveAuditComp")
	@ResponseBody
	public Pagination saveAuditComp(RegCompInfo compInfo) {
		Pagination page = new Pagination(request);
		try {
			if (compInfo != null) {
				compInfo.setAuditor(getUser().getId());
				userAuditManager.saveAuditComp(compInfo);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	/**
	 * @category 跳转医疗机构注册信息审核日志列表页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditHospLogList")
	public String toAuditHospLogList() {
		return "/sys/auditHospLogList";
	}

	/**
	 * @category 分页查询医疗机构注册信息审核日志列表
	 * @date 2015年6月24日
	 * @param hospInfo
	 * @return
	 */
	@RequestMapping("/getAuditHospLogList")
	@ResponseBody
	public Pagination getAuditHospLogList(RegHospInfo hospInfo) {
		Pagination page = new Pagination(request);
		try {
			if (hospInfo != null) {
				userAuditManager.getAuditUserLogList(page, hospInfo);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	/**
	 * @category 跳转企业注册信息审核日志列表页面
	 * @date 2015年6月25日
	 * @param compType1生产企业2配送企业
	 * @return
	 */
	@RequestMapping("/toAuditCompLogList")
	public String toAuditCompLogList(Model model, int compType) {
		model.addAttribute("compType", compType);
		return "/sys/auditCompLogList";
	}

	/**
	 * @category 分页查询企业注册信息审核日志列表
	 * @date 2015年6月24日
	 * @param compInfo
	 * @return
	 */
	@RequestMapping("/getAuditCompLogList")
	@ResponseBody
	public Pagination getAuditCompLogList(RegCompInfo compInfo, int compType) {
		Pagination page = new Pagination(request);
		try {
			if (compInfo != null) {
				userAuditManager.getAuditUserLogList(page, compInfo);
				page.setSuccess(true);
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg("保存失败！");
		}
		return page;
	}

	/**
	 * @category 跳转医疗机构注册信息审核日志详情页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditHospLogDetail")
	public String toAuditHospLogDetail(Model model, String hospId) {
		RegHospInfo hospInfo = new RegHospInfo();
		if (StringUtils.isNotBlank(hospId)) {
			hospInfo = userAuditManager.getAuditHospById(hospId);
		}
		model.addAttribute("hospInfo", hospInfo);
		return "/sys/auditHospLogDetail";
	}

	/**
	 * @category 跳转企业注册信息审核审核页面
	 * @date 2015年6月24日
	 * @return
	 */
	@RequestMapping("/toAuditCompLogDetail")
	public String toAuditCompLogDetail(Model model, int compType, String compId) {
		RegCompInfo compInfo = new RegCompInfo();
		if (StringUtils.isNotBlank(compId)) {
			compInfo = userAuditManager.getAuditCompById(compId);
		}
		model.addAttribute("compType", compType);
		model.addAttribute("compInfo", compInfo);
		return "/sys/auditCompLogDetail";
	}

}
